"""
    本文件用于将没有标准化的文件名改成标准化的
    如
      20190101_1_1.png
        --->
      20190101_01_01.png
"""

import os
import pandas as pd

class BatchRename():
    """
        用于将文件重命名，位置编号变为2位，不够用0来填充
    """
    def __init__(self,path):
        self.path = path  # 表示需要命名处理的文件夹

    def rename(self):
        filelist = os.listdir(self.path)  # 获取文件路径
        total_num = len(filelist)  # 获取文件长度（个数）
        i = 1  # 表示文件的命名是从1开始的
        for item in filelist:
            dst_name = item
            _line1 = item.find('_')
            _line2 = item.rfind('_')
            _dot = item.rfind('.')
            num1 = _line2-_line1
            num2 = _dot-_line2
            dst_name = list(dst_name)
            if num2==2:
                dst_name.insert(_line2+1,'0')
            if num1==2:
                dst_name.insert(_line1+1,'0')
            dst_name = ''.join(dst_name)
            if item!=dst_name:

                # 他格式，后面的转换格式就可以调整为自己需要的格式即可）
                src = os.path.join(os.path.abspath(self.path), item)
                dst = os.path.join(os.path.abspath(self.path), dst_name)  # 处理后的格式也为jpg格式的，当然这里可以改成png格式
                # dst = os.path.join(os.path.abspath(self.path), '0000' + format(str(i), '0>3s') + '.jpg')    这种情况下的命名格式为0000000.jpg形式，可以自主定义想要的格式
                try:
                    os.rename(src, dst)
                    print('converting [%07d/%07d] %s' % (i, total_num, dst_name))
                    i = i + 1
                except:
                    continue
        print('Completed')

class CsvRename():
    """
            用于将csv文件名列重命名，位置编号变为2位，不够用0来填充
    """
    def __init__(self,csv_path):
        self.path = csv_path
        self.chunksize = 100
        self.file = pd.read_csv(self.path)


    def rename(self):
        total = len(self.file.values)
        lines = self.file.values
        for i in range(total):
            name = lines[i][0]
            _line1 = name.find('_')
            _line2 = name.rfind('_')
            _dot = name.rfind('.')
            num1 = _line2 - _line1
            num2 = _dot - _line2

            dst_name = list(name)
            if num2 == 2:
                dst_name.insert(_line2 + 1, '0')
            if num1 == 2:
                    dst_name.insert(_line1 + 1, '0')
            dst_name = ''.join(dst_name)

            if name != dst_name:
                try:
                    lines[i][0] = dst_name
                    print('csv_rename_%07d/%07d'%(i,total),name,lines[i][0])
                except Exception as e:
                    print('Failed',dst_name,e)

        data = pd.DataFrame.from_dict(lines,orient='columns')

        out_path = self.path.replace('.CSV','_new.CSV')
        out_path = out_path.replace('.csv', '_new.csv')
        data.to_csv(out_path,index=False,mode='w')




if __name__ == '__main__':
    #demo = BatchRename('G:/data_copy/img')
    #demo.rename()

    csv_rename = CsvRename('G:/data_copy/LWSCID-S/LWSCID-S.CSV')
    csv_rename.rename()
